<?php

require 'lib/model/om/BaseCriteriu.php';

/**
 * Pentru fiecare criteriu din tabela `criterii` se creeaza:
 * 1. o clasa in care se defineste modul de distribuire
 *    - denumirea clasei: prefixul 'Criteriu' adaugat la denumirea CamelCase a criteriului (ex.: CriteriuApaCalda)
 * 2. dupa caz, o clasa pentru formularul cu parametrii suplimentari necesari la calculul distribuirii
 *    - denumirea clasei: prefixul 'CriteriuForm' adaugat la denumirea CamelCase a criteriului (ex.: CriteriuFormApaCalda)
 */
class Criteriu extends BaseCriteriu
{
    const FORM_CLASS_PREFIX = 'CriteriuForm';

    /**
     * Returneaza formularul ce contine parametrii suplimentari necesari criteriului de distribuire
     *
     * @param array $formArgs Optional se pot trimite parametri la constructorul formularului
     * @return BaseFormPropel
     */
    public function getExtraParamsForm($formArgs = null)
    {
        // verific daca a fost definit formularul corespondent
        // Numele clasei formularului este format din FORM_CLASS_PREFIX si codul CamelCase a criteriului
        $camelCaseCod = ucfirst(sfInflector::camelize($this->getCod()));
        $formClassName = self::FORM_CLASS_PREFIX . $camelCaseCod;
        if (strlen($camelCaseCod) && class_exists($formClassName))
        {
            // instantiez formularul si il returnez
            return new $formClassName($this, $formArgs);
        }
        else
        {
            return null;
        }
    }

    public function __toString()
    {
        return $this->getDescriere();
    }

    public function getCod()
    {
        if ($this->cod === null)
        {
            // extrag codul CamelCased al criteriului
            $class = get_called_class();
            $class = substr($class, strlen(get_class()));

            $this->cod = sfInflector::underscore($class);
        }

        return parent::getCod();
    }

    /**
     * Codul unui criteriu nu poate fi modificat!
     * @param type $v
     */
    public function setCod($v)
    {
        return $this;
    }
}
